#[derive(Debug)]
struct Queue<T> { 
    data: Vec<T> 
}  

impl<T> Queue<T> {  
    // 创建空队列
    fn new() -> Self {
        Queue { data: Vec::new() }
    }

    // 入队操作
    fn enqueue(&mut self, item: T) { 
        /* TODO */ 
        self.data.push(item);
    }  

    // 出队操作（O(n)时间复杂度）
    fn dequeue(&mut self) -> Option<T> { 
        /* TODO */ 
        if self.data.is_empty() {
            None
        } else {
            Some(self.data.remove(0)) // 实际生产建议使用VecDeque
        }
    }  
}  

#[test] 
fn test_generic_queue() { 
    /* 测试多种类型 */ 
    // 测试整数队列
    let mut int_queue = Queue::new();
    int_queue.enqueue(1);
    int_queue.enqueue(2);
    assert_eq!(int_queue.dequeue(), Some(1));
    assert_eq!(int_queue.dequeue(), Some(2));
    assert_eq!(int_queue.dequeue(), None);

    // 测试字符串队列
    let mut str_queue = Queue::new();
    str_queue.enqueue("hello");
    str_queue.enqueue("rust");
    assert_eq!(str_queue.dequeue(), Some("hello"));
}  

// 添加队列操作演示
fn main() {
    let mut queue = Queue::new();
    queue.enqueue("First");
    queue.enqueue("Second");
    queue.enqueue("Third");
    
    println!("Dequeue order:");
    while let Some(item) = queue.dequeue() {
        println!("- {}", item);
    }
}